/*
 * Tactica1MedioDerecho.java
 *
 * Created on 9 de abril de 2007, 23:07
 *
 */

package futbol.tacticas.concursantes2007.tikitaka.tactica;

import futbol.tacticas.*;
import futbol.General;
import java.awt.Point;

/**
 *
 * @author leamsi78
 */
public class Tactica1MedioDerecho extends Estado {
    
    /** Creates a new instance of Tactica1MedioDerecho */
    public Tactica1MedioDerecho() {
    }
    public void Entrar(Object obj)
    {
    }
    
    public void Ejecutar(Object obj)
    {
        Tactica1 tactica = (Tactica1)obj;
        Tactica1.JugadorBase j = tactica.jugador[tactica.MEDIO_DERECHO];
        if (tactica.jugadorMasCercaBalon != tactica.MEDIO_DERECHO)
        {
            //Mantener a los jugadores del centro del campo en una posicion relativa al balon
            int desplazamientoX = (int)(tactica.balon.getPosicionActual().getX() / 5);
            int desplazamientoY = 0;
            double distanciaY = tactica.balon.getPosicionActual().getY() - tactica.jugador[tactica.MEDIO_CENTRO].getPosicion().getY();
            if (distanciaY > 40.0) 
            {
                desplazamientoY += (int)((distanciaY - 40.0) / 2);
                if (desplazamientoY > 50.0) desplazamientoY = 50;
            }
            if (distanciaY < -40.0)
            {
                desplazamientoY += (int)((distanciaY + 40.0) / 2);
                if (desplazamientoY < -50.0) desplazamientoY = -50;
            }
            if (tactica.jugadorMasCercaBalon != tactica.DEFENSA_DERECHO)
                tactica.comandos.add(new ComandoIrA(tactica.MEDIO_DERECHO,  30 + desplazamientoX, 40 + desplazamientoY));
            else
                tactica.comandos.add(new ComandoIrA(tactica.MEDIO_DERECHO, 60 + desplazamientoX * 4, 80));
        }
        else
        {
            //Tenemos que ir hacia el balon y cuando estemos a menos de 10 entonces golpear el balon
            if (!j.cercaBalon())
            {
                j.irAlBalon();
            }
            else
            {
                Point delantero = tactica.jugador[tactica.DELANTERO].getPosicion();
                Point delanteroLateral = tactica.jugador[tactica.DELANTERO_LATERAL].getPosicion();
                if (Util.distancia_2(j.getPosicion(), new Point(0, 0)) < 3600)
                {
                    tactica.jugador[tactica.MEDIO_DERECHO].tirarAPuerta();
                }
                else if (tactica.jugador[tactica.MEDIO_DERECHO].jugadorCerca() == true)
                {
                    if (Math.random() < 0.5)
                        tactica.comandos.add(new ComandoGolpearBola(tactica.MEDIO_DERECHO, delantero.getX() + 0 /*15*/, delantero.getY() - 0));
                    else
                        tactica.comandos.add(new ComandoGolpearBola(tactica.MEDIO_DERECHO, delanteroLateral.getX() + 0 /*15*/, delanteroLateral.getY() - 0));
                }
                else
                {
                    tactica.jugador[tactica.MEDIO_DERECHO].llevarBalon(new Point(160, 0));
                }
            }
        }
    }
    
    public void Salir(Object obj)
    {
    }
    
    public boolean Mensaje(Object obj, Mensaje mensaje)
    {
        return true;
    }
}
